package src.edu.wayne.cs.csc4110.hw6.interfaces;

public interface State {
	/**
	 * For each State in the stateMachine.  One should have a 
	 * State for each of these methods.  The methods themselves
	 * allow for the stateMachine to transition from one state
	 * to the next.
	 */
	
	/**
	 * The LoggedInState is where games are played.
	 * 
	 * goToLoggedInState should take the machine to the logged in state, if
	 * it can be reached from the current state.  For this implementation that
	 * is possible from most other states, provided that the user can pass a login
	 * test.
	 */
	public void goToLoggedInState();
	
	/**
	 * Takes the user to he Register State, where they can add a new registration into
	 * the system.
	 */
	public void goToRegisterState();
	
	/**
	 * Although it is not implemented at this time, the intent of this state
	 * was to take logged in users to a state whereby they could communicate with
	 * other users via a private chat room.
	 */
	public void goToPrivateChatState();
	
	/**
	 * Takes the state machine to a state where users who have accounts can log in.
	 */
	public void goToNotLoggedInState();
	
	/**
	 * Transitions the terminal from one logged in user to another.
	 */
	public void goToChangeToNextUserState();
	
	/**
	 * Allows a logged in user to log out.
	 */
	public void logOutCurrentUser();
	
	/**
	 * fetches the current user who has control of the terminal.
	 * @return
	 */
	public User getCurrentUser();

}
